Massively parallel processing systems are systems in which processors perform, in parallel, an operation or a series of operations. Each processor thus simultaneously manipulates data stored therein in accordance with instructions associated with the operations. The data may then be transferred, further manipulated or combined, as required. Parallel processing has distinct advantages for many types of data manipulation or computation operations, such as data base management where each entry in a data base may be manipulated in parallel. Such a system, for example, can quickly search a data base.
Massively parallel systems may include tens of thousands, or more, interconnected processors. A theory of the operations of such systems is discussed in Daniel W. Hillis's dissertation entitled "The Connection Machine", published by MIT Press in 1981. Hillis, in his dissertation, theorizes that dynamic allocation of the processors to on-going operations is a desirable feature for such massively parallel processing systems. Thus as a series of operations are being performed in the system, additional processors are allocated to each of them, as needed. In this way, a programmer or a user need not guess how many processors will be required for a particular operation and reserve them. Such reservations restrict the use of the processors to the particular operations and make them unavailable for other operations, whether or not they are actually in use. Also, if these reservations are inaccurate and more processors are required, the operations must be re-started with the proper number of processors allocated.
Dynamic allocation of processors can be analogized to dynamic allocation of memory in conventional systems. To date, known attempts at dynamic allocation of processors in a massively parallel processing system have been made using languages such as LISP. As Hillis explains in his dissertation, processors are allocated using "xectors", each of which correspond to a set of processors with a value stored in each processor. A processor is allocated as part of a xector by assigning to it the associated value for storage. The xectors are then treated as LISP objects. Accordingly, a xector may be included in an operation, which is the same as performing the operation on the data stored in each processor in the set.
Other languages make use of explicit pointers to point to dynamically allocated memory. Thus, the pointers point from one memory location to one or more allocated memory locations. It is desirable to include in a system which uses such a language a mechanism for dynamically allocating processors. The dynamically allocated processors can then be included in various operations using pointers.